import datetime
import os
import sys

import qrcode
from PIL import Image

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if BASE_DIR not in sys.path:
    sys.path.append(BASE_DIR)
from conf import config
from helper.payment.pay_util import generator_trade_no


class ImgHelper(object):
    @staticmethod
    def merge(qr_img, base_img, base_url, logo_img=None, logo_rate=0.188, left=52, top=870, qr_width=230,
              qr_height=230):
        """
        合成图片
        :param qr_img: 二维码图片Image对象
        :param base_img: 背景图Image对象
        :param base_url: 当前项目的可访问的url，例如： http://192.168.4.26:8000/
        :param logo_img: 二维码中的logo图片Image对象
        :param logo_rate: logo相对于二维码的比例
        :param left: 二维码图片左上角在底图的x坐标
        :param top: 二维码图片左上角在底图的y坐标
        :param qr_width: 二维码宽度
        :param qr_height: 二维码高度
        :return: 完成可访问的url
        """
        # 在此处修改二维码的位置和大小
        # 被粘贴的图片的左上角在底图的位置 (left,top)
        box = (left, top)

        # 画板
        target = Image.new('RGBA', base_img.size, (0, 0, 0, 0))

        # 确保图片是RGBA格式，大小和box区域一样
        qr_img = qr_img.convert("RGBA")
        # 修改图片尺寸
        # (width, height)
        qr_img = qr_img.resize((qr_width, qr_height))
        # 先将二维码合成到底图上
        # 第一个参数表示需要粘贴的图像，最后是一个坐标
        target.paste(base_img, (0, 0))
        target.paste(qr_img, box)

        if logo_img:
            logo_width = int(qr_width * logo_rate)
            logo_height = int(qr_height * logo_rate)
            logo_box = (left + int((qr_width - logo_width) / 2), top + int((qr_height - logo_height) / 2))
            logo_img = logo_img.resize((logo_width, logo_height))
            target.paste(logo_img, logo_box)

        # 将图片保存到static目录下，每天建一个文件夹
        dir_suffix = "static/img/qrcode/%s/" % datetime.datetime.now().strftime("%Y%m%d")
        base_path = os.path.join(config.NFS_DIR, dir_suffix)
        if not os.path.exists(base_path):
            os.makedirs(base_path)

        filename = "%s.png" % generator_trade_no()
        target.save(os.path.join(base_path, filename))  # 保存图片
        target.close()
        qr_img.close()
        base_img.close()
        if logo_img:
            logo_img.close()

        # 返回完整的图片url地址
        full_url = base_url + dir_suffix + filename
        return full_url


if __name__ == '__main__':
    url = "http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(url)
    qr.make(fit=True)
    img = qr.make_image()
    b = Image.open(os.path.join(config.BASE_DIR, "static/img/qrcode-bg.png"))
    u = ImgHelper.merge(img, b, "http://127.0.0.1:8000/")
    print(u)
